package cn.demoncat.util.conn;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

/**
 * 连接池配置(根类)
 *
 * <h2>配置文件：<h2/>
 * <pre>
 *  # 连接地址
 *  ?url=127.0.0.1:21
 *  # 连接池最小的空闲对象个数（默认0）
 * 	?.min-idle=0
 * 	# 连接池最大的空闲对象个数（默认5）
 * 	?.max-idle=10
 * 	# 连接池最多对象个数（超过时将阻塞等待释放，默认20）
 * 	?.max-total=50
 * 	# 连接池空闲对象检测周期毫秒（毫秒，-1表示不检测，默认10分钟）
 * 	?.time-between-eviction-runs-millis=600000
 * 	# 连接池每次检测空闲对象的数量（默认3）
 * 	?.num-tests-per-eviction-run=3
 * 	# 读取时间(毫秒；超时读取不到数据时中断，默认1分钟)
 * 	?.so-timeout=60000
 * 	# 连接超时(毫秒；超时创建不了连接时中断，默认1分钟)
 * 	?.connect-timeout=60000
 * </pre>
 * 
 * @author 延晓磊
 *
 * @since 2019年11月4日
 */
public class ConnPoolConfig<T> extends GenericObjectPoolConfig<T> {

	// 服务端URL，多个用,分隔
	private String url;
	// 读取时间(毫秒；超时读取不到数据时中断)
    private int soTimeout = 60_000;
    // 连接超时(毫秒；超时创建不了连接时中断)
    private int connectTimeout = 60_000;

	/**
	 * 创建连接池配置
	 */
    public ConnPoolConfig() {
		super();
		// 最小的空闲对象个数
		setMinIdle(0);
		// 最大的空闲对象个数
		setMaxIdle(5);
		// 最多对象个数（超过时将阻塞等待释放）
		setMaxTotal(20);
		// 空闲对象检测周期毫秒（毫秒，-1表示不检测，默认10分）
		setTimeBetweenEvictionRunsMillis(600000);
		// 每次检测空闲对象的数量
		setNumTestsPerEvictionRun(3);
		// 从连接池取出对象是是否检测有效性
		setTestOnBorrow(true);
		// 创建对象时是否检测有效性
		setTestOnCreate(false);
		// 归还对象到连接池时是否检测对象的有效性
		setTestOnReturn(false);
		// 检测空闲对象时是否检测对象的有效性
		setTestWhileIdle(false);
		// 连接池没有空闲对象时，获取新对象时是否阻塞
		setBlockWhenExhausted(true);
	}

	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
    public int getSoTimeout() {
		return soTimeout;
	}
	public void setSoTimeout(int soTimeout) {
		this.soTimeout = soTimeout;
	}
	public int getConnectTimeout() {
		return connectTimeout;
	}
	public void setConnectTimeout(int connectTimeout) {
		this.connectTimeout = connectTimeout;
	}

}